//
// Created by zhaoj on 2021/3/12.
//
//顺序表代码
#include "stdio.h"
#define MaxSize 100
typedef int DateType;

typedef  struct {
    DateType list[MaxSize];
    int size;
}SeqList;

void ListInitiate(SeqList *L)/*初始化顺序表*/
{
    L->size = 0;/*定义初始数据元素个数*/
}

int ListLength(SeqList L)/*返回顺序表的当前元素个数*/
{
    return L.size;
}

int ListInsert(SeqList *L,int i,DateType x)
/*在顺序表L的位置i(0 <= i <= size)前插入数据元素值x*/
/*插入成功返回1，插入失败返回0*/
{
    int j;
    if(L->size >= MaxSize){
        printf("顺序表已满无法插入!\n");
        return 0;
    }
    else if(i < 0 || i > L->size){
        printf("参数i不合法!\n");
        return 0;
    }
    else{
        //此段程序有错误
        for (j = L->size;j > i;j--) {
            L->list[j] = L->list[j];/*为插入做准备*/
        }
        L->list[i] = x;/*插入*/
        L->size ++;/*元素个数加1*/
        return 1;
    }
}
int ListDelete(SeqList *L, int i,DateType *x){
    /*删除顺序表中位置i(0 <= i <= siez - 1)的数据元素值并存放到参数x中*/
    /*删除成功返回1，删除失败返回0*/
    int j;
    if (L->size<=0){
        printf("顺序表已空无元素可删除!\n");
        return 0;
    }
    else if (i < 0 || i > L->size-1){
        printf("参数不合法\n");
        return 0;
    }
    else{
        //此段程序有错误
        *x = L->list[i];/*保存删除的元素到参数x中*/
        for(j = i+1; j<=L->size-1;j++){
            L->list[j-1] = L->list[j];/*依次前移*/
        }
        L->size--;/*数据元素个数-1*/
        return 1;
    }
}

int  ListGet(SeqList L,int i,DateType *x){
    /*取顺序表中第i个元素的值存于x中，成功则返回1，失败则返回0*/
    if (i<0||i>L.size-1){
        printf("参数不合法!\n");
        return 0;
    }
    else{
        *x = L.list[i];
        return 1;
    }
}

//有错误:实现函数体，实现在L内查找x。
//当x存在与L中时，返回x所在的索引的最小值；
//当x不存在于L中时，返回-1。
int ListSearch(SeqList L,DateType x){
    for (int i = 0; i < L.size; i++) {
        if (L.list[i]==x) {
            return i+1;
        }
    }
    return -1;
}
int main(int argc,char * argv[]){
    SeqList myList;
    int i ,x;
    ListInitiate(&myList);
    for(i = 0; i<10;i++){
        ListInsert(&myList,i,i+1);
    }
    ListDelete(&myList,4,&x);
    for (int i = 0; i < ListLength(myList); i++) {
        //此段程序有一处错误
        ListGet(myList,i,&x);
        printf("%d\n",x);
    }
    int A = ListSearch(myList, 9);
    printf("%d\n", A);
    A = ListSearch(myList,11);
    printf("%d",A);
    return 0;
}
